#!/usr/bin/python
#_*_ coding:utf-8 _*_
#====*1,这个位置优化下，使用用户能自定义创建表名称*=====,2，用户可以直接进入某个表，随意添加数据,3，用户连接多次mysql的问题，可将if Z == num放在类里面
import MySQLdb
conn = MySQLdb.connect(host='192.168.100.100',user='root',passwd='123456',db='day11')
class mysqlapi(object):
    def __init__(self):
        self.conn = conn


    def createdatabase(self):
        print '操作Mysql创建主机组表:创建zhujizu表，插入数据'
        #连接数据库
        #conn = MySQLdb.connect(host='192.168.100.100',user='root',passwd='123456',db='day11')
        self.conn
        #打开连接
        cur = conn.cursor()
        #自定义创建一个表名称
        #shurux = raw_input('输入你需要创建的表名字==>')
        #reCount = cur.execute('create table %s(id int  not null auto_increment primary key,name char(20) not null),(shurux);')
        reCount = cur.execute('create table zhujizu(id int  not null auto_increment primary key,name char(20) not null);')


        #插入数据。注意这里的%s与python里的不同，操作数据库时只有%s，没有python的%d什么的
        #reCount1 = cur.execute('insert into zhujizu(name) values("CTO")')   #这里因为ID是自增的，可以不用指定

        shuru = raw_input('输入需要创建的主机组名称！注意是主机组表里的数据==>')
        reCount2 = cur.execute('insert into zhujizu(name) values(%s)',shuru)

        conn.commit()
        cur.close()
        conn.close()
        #reCount表示执行上在的语句影响的条数
        print reCount
        #print reCount1
        print reCount2

    def createtable(self):
        print '操作Mysql创建主机表:创建zhujibiao表，插入数据'
        self.conn
        cur = conn.cursor()
        #创建表
        reCount = cur.execute('create table zhujibiao(id int  not null auto_increment primary key,ip char(15) not null,name char(5) not null);')

        shuruIP = raw_input('输入需要创建的IP==>')
        shuruZU = raw_input('输入需要创建的归属的组==>')
        reCount2 = cur.execute('insert into zhujibiao(ip,name) values(%s,%s)',(shuruIP,shuruZU))

        conn.commit()
        cur.close()
        conn.close()
        print reCount
        print reCount2
    def createhost(self):
        print '操作Mysql创建用户表:创建yongfubiao表，插入数据'
        self.conn
        cur = conn.cursor()
        #创建表
        reCount = cur.execute('create table yongfubiao(id int  not null auto_increment primary key,user char(15) not null,zu char(5) not null);')

        shuruHOST = raw_input('输入需要创建的用户名==>')
        shuruZU = raw_input('输入需要创建的归属的组==>')
        reCount2 = cur.execute('insert into yongfubiao(ip,zu) values(%s,%s)',(shuruHOST,shuruZU))

        conn.commit()
        cur.close()
        conn.close()
        print reCount
        print reCount2

    def show(self):
        print '管理员登陆查看所有的主机组'
        # ############################## fetchall  ##############################
        self.conn
        #这一行打开后，并将cur = conn.cursor()行注释掉后，fetchall()取出来的数据就会是字典的方式。但外层还是列表
        #cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
        cur = conn.cursor()
        #查看所有主机组
        reCount = cur.execute('select name from zhujizu')
        nRet = cur.fetchall()
        cur.close()
        conn.close()

        print reCount
        print nRet
        #for i in nRet:
         #   print i[0],i[1]

    def showhost(self):
        print '管理员登陆查看所有的主机组里的主机'
        # ############################## fetchall  ##############################
        self.conn
        #这一行打开后，并将cur = conn.cursor()行注释掉后，fetchall()取出来的数据就会是字典的方式。但外层还是列表
        cur = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
        #cur = conn.cursor()
        #查看所有主机组里的主机
        #and双方都成立
        ####################################################################实现用户可以输入组#######
        #reCount = cur.execute('select ip,zhujibiao.name from zhujizu,zhujibiao where zhujibiao.name = %s and zhujizu.name = %s',())
        reCount = cur.execute('select ip,zhujibiao.name from zhujizu,zhujibiao where zhujibiao.name = "cto" and zhujizu.name = "cto"; ')
        nRet = cur.fetchall()
        cur.close()
        conn.close()

        #print reCount
        #print nRet

        '''
        for k in nRet:
            print k[0]
            '''
        #将字典转换成列表
        V = []
        for i in nRet:
            Z = V.append(i['ip'])
        print '当前主机组里的主机有',V
        shuru = raw_input('是否批量操作命令')
        if shuru == 'YES' or shuru == 'yes':
            for i in V:
                print i

                import paramiko
                transport = paramiko.Transport((i, 22))
                transport.connect(username='root', password='homevv123')

                ssh = paramiko.SSHClient()
                ssh._transport = transport
                #优化你需要进行的操作
                stdin, stdout, stderr = ssh.exec_command('hostname')
                print stdout.read()

                transport.close()


#一次创建一个表
if __name__ == '__main__':
    print '''
    1.创建主机组表
    2.创建主机表
    3.创建用户表
    4.查看主机组
    5.查看主机组中的主机
    '''
    Z = raw_input('选择你要进行的操作')
    p1 = mysqlapi()
    if Z == '1':
        p1.createdatabase()
    if Z == '2':
        p1.createtable()
    if Z == '3':
        p1.createhost()
    if Z == '4':
        p1.show()
    if Z == '5':
        p1.showhost()

